2023a 第13回:Python 関数の定義
学生証のカードリーダー
前回授業(list, dictionary) の復習および本日の予習 (関数定義) を兼ねて
授業で実稼働している学生証リーダーについて解説
SA宮嶋くんの力作です!
一部抜粋/改変版
code:python
import nfc
# NFCカードを検知したら実行してほしい処理のカタマリを on_connect という名前の関数として定義している (def on_connect)
# 処理を実行する際に、読み取ったNFCのデータが必要になるため、tagという変数名で呼び出し時に渡してもらうようになっている (tag)
# e.g. math.sqrt(2) の2と同じように、読み取ったNFCのデータを受け取る
# math.sqrtは抽象化すると以下のような実装となっている
# def sqrt(num):
# return res
#
# ====関数定義=====
def on_connect(tag):
# tag変数には「読み取ったNFCカードのデータ」が格納される
# tag.dump()を実行すると、中のデータがlist形式で取り出せる
data = tag.dump()
# 学籍番号は34番目の領域に格納されている
# 34番目の領域は xxx|yyy|zzz のように複数のデータが|で分割された文字列になっている
# 文字列を|で分割して、2番目の情報 (上述のyyyが該当) を取り出す
# 学籍番号(xxxx) は xxxxxx002062... という形で格納されているため、002062で文字列を前後分割し、前にある要素を取り出す
student_number = target.split("002062")0 print(student_number)
# =====関数定義はここまで=====
# 学生証リーダー(NFC読み取り機)を操作するライブラリをセットアップ
clf = nfc.ContactlessFrontend("usb")
# 無限ループ (学生証は何回読み取りが行われるかわからないため)
while True:
# NFCカードがかざされるまで待機し、カードを検知すると on_connect関数を実行する
# 内部的には on_connect(tag) のように実行される
clf.connect(rdwr={'on-connect': on_connect})
最終回、今日やるのは「処理の塊 (=関数)」です!
前回授業の復習
講義最終回